
#ifndef etl_base_h
#define etl_base_h

namespace etl
{

template<class T>
class etl_base
{
 public:

  /// No argument constructor.
  etl_base()
    {
    }

  /// Destructor. Here to enforce that the children of this object have virtual
  /// destructors.
  virtual ~etl_base()
    {
    }

  /// Empty this container.
  virtual int clear() = 0;

  /// Reset our internal iterator to the beginning of the set.
  virtual int iter_begin() = 0;

  /// Reset our internal iterator to the end of the set.
  virtual int iter_end() = 0;

  /// Move our iterator to the next item contained in this object.
  virtual int iter_next() = 0;

  /// Move our iterator to the previous item contained in this object.
  virtual int iter_prev() = 0;

  /// Return a pointer to the object currently pointed to by our internal
  /// iterator.
  virtual T* iter_data() = 0;

  /// Returns whether or not the internal iterator is pointing at something
  /// valid, or has walked off the end of the set.
  virtual bool  iter_valid() = 0;

};

}

#endif
